package config

import (
	"bytes"
	"context"
	"math/big"
	"os"

	"github.com/ethereum/go-ethereum/accounts/abi"
	"github.com/ethereum/go-ethereum/common"
	"github.com/ethereum/go-ethereum/ethclient"
)

//调用智能合约的配置
//合约调用
// 配置信息 - 请根据实际情况修改
const (
	NodeURL       = "http://localhost:8545"        // 本地Hardhat节点地址
	ContractAddr  = "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512" // 部署的Wallet合约地址
	ABIConfigPath = "config/abi.json"       // ABI配置文件路径
)

// 全局变量：存储合约连接和配置
var (
	EthClient  *ethclient.Client // 以太坊客户端
	WalletABI  abi.ABI           // 钱包合约ABI
	WalletAddr common.Address    // 钱包合约地址
	ChainID    *big.Int          // 链ID（本地测试网通常为31337）
)

// ContractInit 初始化合约连接，返回客户端、ABI、合约地址和错误
func ContractInit()  error {
	// 1. 连接节点
	client ,err := ethclient.Dial(NodeURL)
	if err != nil {
		return err
	}
	EthClient = client
		// 2. 获取链ID
	chainID, err := EthClient.ChainID(context.Background())
	if err != nil {
		return err
	}
	ChainID = chainID
	// 3. 读取合约ABI
	abiBytes, err := os.ReadFile(ABIConfigPath)
	if err != nil {
		return err
	}
	parsedABI, err := abi.JSON(bytes.NewReader(abiBytes))
	if err != nil {
		return err
	}
	WalletABI = parsedABI
	// 4. 设置合约地址（替换为实际部署的地址）
	WalletAddr = common.HexToAddress(ContractAddr)
	return nil
}

